package com.itextpdf.text.pdf.table;
import com.itextpdf.testutils.CompareTool;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import junit.framework.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author Michael Demey
*/
public class RowspanTest {
private static final String CMP_FOLDER = "./src/test/resources/com/itextpdf/text/pdf/table/RowspanTest/";
private static final String OUTPUT_FOLDER = "./target/com/itextpdf/test/pdf/table/RowspanTest/";
@BeforeClass
public static void init() {
new File(OUTPUT_FOLDER).mkdirs();
}
@Test
public void rowspanTest() throws IOException, DocumentException, InterruptedException {
String file = "rowspantest.pdf";
File fileE = new File(CMP_FOLDER + file);
System.out.println(fileE.exists());
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(OUTPUT_FOLDER + file));
document.open();
PdfContentByte contentByte = writer.getDirectContent();
Rectangle rect = document.getPageSize();
PdfPTable table = new PdfPTable(4);
table.setTotalWidth(rect.getRight()-rect.getLeft()+1);
table.setLockedWidth(true);
float[] widths = new float[]
{
0.1f, 0.54f, 0.12f, 0.25f
};
table.setWidths(widths);
PdfPCell cell_1_1 = new PdfPCell(new Phrase("1-1"));
cell_1_1.setColspan(4);
table.addCell(cell_1_1);
PdfPCell cell_2_1 = new PdfPCell(new Phrase("2-1"));
cell_2_1.setRowspan(2);
table.addCell(cell_2_1);
PdfPCell cell_2_2 = new PdfPCell(new Phrase("2-2"));
cell_2_2.setColspan(2);
table.addCell(cell_2_2);
PdfPCell cell_2_4 = new PdfPCell(new Phrase("2-4"));
cell_2_4.setRowspan(3);
table.addCell(cell_2_4);
PdfPCell cell_3_2 = new PdfPCell(new Phrase("3-2"));
table.addCell(cell_3_2);
PdfPCell cell_3_3 = new PdfPCell(new Phrase("3-3"));
table.addCell(cell_3_3);
PdfPCell cell_4_1 = new PdfPCell(new Phrase("4-1"));
cell_4_1.setColspan(3);
table.addCell(cell_4_1);
table.writeSelectedRows(0, -1, rect.getLeft(), rect.getTop(), contentByte);
document.close();
// compare
CompareTool compareTool = new CompareTool();
String errorMessage = compareTool.compareByContent(OUTPUT_FOLDER + file, CMP_FOLDER + file, OUTPUT_FOLDER, "diff");
if (errorMessage != null) {
Assert.fail(errorMessage);
}
}
@Test
public void nestedTableTest() throws DocumentException, IOException, InterruptedException {
Document doc = new Document(PageSize.A4);
String file = "nestedtabletest.pdf";
PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(OUTPUT_FOLDER + file));
doc.open();
ColumnText col = new ColumnText(writer.getDirectContent());
col.setSimpleColumn(
Utilities.millimetersToPoints(25),
Utilities.millimetersToPoints(25),
PageSize.A4.getRight() - Utilities.millimetersToPoints(25),
PageSize.A4.getTop() - Utilities.millimetersToPoints(25));
PdfPTable table = new PdfPTable(3);
table.setHeaderRows(1);
table.addCell("H1");
table.addCell("H2");
table.addCell("H3");
for (int i = 0; i < 15; i++) {
PdfPCell cell = new PdfPCell(createNestedTable());
cell.setRowspan(3);
cell.setColspan(3);
table.addCell(cell);
}
col.addElement(table);
while (ColumnText.hasMoreText(col.go())) {
doc.newPage();
col.setYLine(PageSize.A4.getTop() - Utilities.millimetersToPoints(25));
}
doc.close();
// compare
CompareTool compareTool = new CompareTool();
String errorMessage = compareTool.compareByContent(OUTPUT_FOLDER + file, CMP_FOLDER + file, OUTPUT_FOLDER, "diff");
if (errorMessage != null) {
Assert.fail(errorMessage);
}
}
private PdfPTable createNestedTable() {
PdfPTable table = new PdfPTable(3);
table.addCell("S1");
table.addCell("S2");
table.addCell("S3");
for (int i = 0; i < 2; i++) {
table.addCell(" " + (i + 1));
table.addCell(" " + (i + 1));
table.addCell(" " + (i + 1));
}
return table;
}
}